common/vsprintf: fix return value when formatting symbolic addresses
authorJan Beulich <jbeulich@suse.com>
Tue, 3 Dec 2013 08:57:41 +0000 (09:57 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 3 Dec 2013 08:57:41 +0000 (09:57 +0100)
When the buffer to be formatted to is too small, the function return
value is expected to be the number of characters that would be printed
(particularly important if that value is then used for allocating a
buffer). Hence incrementing the active pointer must always be
independent of actually storing a character.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
xen/common/vsprintf.c

index 43dc3929163e787128577bb9e7d60c16effb594e..1a6198e4d316ac9f5ad2374de63edf871611adba 100644 (file)
@@ -294,7 +294,8 @@ static char *pointer(char *str, char *end, const char **fmt_ptr,
             /* Print '+<offset>/<len>' */
             str = number(str, end, sym_offset, 16, -1, -1, SPECIAL|SIGN|PLUS);
             if ( str <= end )
-                *str++ = '/';
+                *str = '/';
+            ++str;
             str = number(str, end, sym_size, 16, -1, -1, SPECIAL);
         }